package java44th.group.config;


import org.apache.shiro.SecurityUtils;
import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;

import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import java.io.Serializable;

/**
 * @ProjectName project-second
 * @Descriptiom TODO
 * @Aurhor: 蔡文强
 * @Since: 2022/10/14 15:26
 */
// 保证跨域场景下的session一致问题
// 因为Shiro是通过session维护的，不然认证授权就白做了
public class MarketSessionManager extends DefaultWebSessionManager {

    // 和前端同学约定好一个头
    public static final String MARKET_ADMIN_TOKEN = "X-CskaoyanMarket-Admin-Token";
    //小程序前端的头
    public static final String MARKET_WX_TOKEN = "X-CskaoyanMarket-Token";
    // 找到带有request和response参数的getSessionId方法，因为后面要用到这两个参数
    // 通过request可以获得特定请求头的参数
    @Override
    protected Serializable getSessionId(ServletRequest request, ServletResponse response) {
        // 做个强转，为了获取该类型的方法
        HttpServletRequest httpServletRequest = (HttpServletRequest) request;
        // 使用全局变量，不要出现魔法值
        String sessionId = httpServletRequest.getHeader(MARKET_ADMIN_TOKEN);
        if (sessionId != null && !"".equals(sessionId)) {
            // 保证session没有变化，重写这个方法也是为了这一步
            return sessionId;
        }
        //WX
        String sessionId2 = httpServletRequest.getHeader(MARKET_WX_TOKEN);
        if (sessionId2 != null && !"".equals(sessionId2)) {
            // 保证session没有变化，重写这个方法也是为了这一步
            return sessionId2;
        }

        return super.getSessionId(request, response);
    }


}
